#ifndef QLOGTOOL_H
#define QLOGTOOL_H
#include <stdarg.h>
#include <string>
#include <memory>
#include <QString>
#include <QObject>

enum DATA_TYPE{
    b,
    B,
    KB,
    MB,
    GB
};
/*
通过单例模式实现一个日志工具
1. 外部组件以LOG(char, ...)的形式调用
2. 通过标准库实现线程安全
3. 提供日志文本信号
*/
class QLogTool : public QObject
{
    Q_OBJECT
signals:
    void SigLogBox(QString boxTitle, QString info);
    void SigLogStaBar(QString str);
public:
    static QLogTool& Instance()
    {
        static QLogTool m_instance;
        return m_instance;
    }
    void LogBox(QString boxTitle, QString info)
    {
        emit SigLogBox(boxTitle, info);
    }
    void LOGStaBar(QString str)
    {
        emit SigLogStaBar(str);
    }
private:
    QLogTool() {}
    ~QLogTool() {}
};

void LOG(const char *str, ...);
void LOG(std::string str);
void LOG(QString qLog);
std::string ReUnitSize(int num, DATA_TYPE src, DATA_TYPE dst);
void LOGBox(const std::string& title, const char *str, ...);
void LOGBox(const std::string& title, QString str);

#endif
